var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
const jwt = require("jwt-simple");
const md5 = require("md5");

//用户名模块的路由
const { userRouter } = require("./routes/userRouter");
const { cartRouter } = require("./routes/cartRouter");

var app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
//把前面的静态页面+jq的效果,当前 项目的静态资源
app.use(express.static("../src"));
var list = [
  "/user/login",
  "/user/reg",
  "/cart/add",
  "/cart/getGoodsById?id=1001",
  "/cart/getGoodsById?id=1002",
  "/cart/getGoodsById?id=1003",
  "/cart/getGoodsById?id=1004",
  "/cart/getCart",
  "/cart/delete",
]; //,'/cart/getgoods'

app.all("*", function (req, res, next) {
  console.log(req.url);
  if (list.some((item) => req.url.startsWith(item))) {
    next(); // 放行
  } else {
    try {
      //是否带了token
      var token;
      if (req.headers["authorization"]) {
        token = req.headers["authorization"].split(" ")[1];
      } else {
        token =
          req.query.token ||
          req.body.token ||
          req.headers.token ||
          req.cookies.token;
      }

      jwt.decode(token, md5("cs2201"));
      next();
    } catch (error) {
      res.json({ msg: "您的token已失效,请重新登录!" });
    }
  }
});
//配置路由
app.use("/user", userRouter);
app.use("/cart", cartRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;
